home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / mditot_1 / mdichild.cab / Subclass.bas < prev    next >
Encoding:
BASIC Source File  |  1999-05-24  |  1.5 KB  |  51 lines

  1. Attribute VB_Name = "Subclass"
  2. Option Explicit
  3.  
  4. Private Const WM_INITMENUPOPUP = &H117
  5.  
  6. Private Const GWL_WNDPROC& = (-4)
  7.  
  8. Private mlOldhWndProc             As Long
  9. Private mlNewhWndProc             As Long
  10.  
  11. Private Declare Function SetWindowAsLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  12. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  13.  
  14. Public Sub HookWindow(hwnd&)
  15. ' Install our message Handler
  16.   If Not hwnd = 0 Then
  17.     If Not mlOldhWndProc = 0 Then UnHookWindow
  18.     mlNewhWndProc = hwnd
  19.     mlOldhWndProc = SetWindowAsLong(mlNewhWndProc, GWL_WNDPROC, AddressOf WndProc)
  20.   End If
  21. End Sub
  22.  
  23.  
  24. Public Sub UnHookWindow()
  25. ' Restore Old Handler
  26.   If Not mlNewhWndProc = 0 Then
  27.     Call SetWindowAsLong(mlNewhWndProc, GWL_WNDPROC, mlOldhWndProc)
  28.     mlOldhWndProc = 0
  29.     mlNewhWndProc = 0
  30.   End If
  31. End Sub
  32.  
  33.  
  34. Private Function WndProc(ByVal hwnd As Long, _
  35.                          ByVal lMsg As Long, _
  36.                          ByVal wParam As Long, _
  37.                          ByVal lParam As Long) As Long
  38. On Error Resume Next
  39. 'Debug.Print lMsg
  40.   If lMsg = WM_INITMENUPOPUP Then
  41.     'Update Menu text if index=2 (Window List Menu)
  42.     If (lParam And &HFFFF&) = 2 Then
  43.       FMain.BuildMenu
  44.     End If
  45.   Else
  46.     WndProc = CallWindowProc(mlOldhWndProc, hwnd, lMsg, wParam, lParam)
  47.   End If
  48. End Function
  49.  
  50.  
  51.